package com.tuyrt.firstcode

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations
import androidx.lifecycle.ViewModel
import com.tuyrt.firstcode.module.data.User

/**
 * Created by tuyrt7 on 2021/4/13.
 *  LiveData 使用 map、switchMap 的场景：
 */
class MainViewModel : ViewModel() {

    //当viewModel中的某一个liveData 对象是调用另外的方法获取的，使用switchMap
//    fun getUser(userId: String): LiveData<User> {
//        return MainRepository.getUser(userId)
//    }
    private val userIdLiveData = MutableLiveData<String>()
    val user: LiveData<User> = Transformations.switchMap(userIdLiveData) { userId ->
        MainRepository.getUser(userId)
    }

    // user类型的 liveData 转 string
    val userName: LiveData<String> = Transformations.map(user) { user ->
        "姓名： ${user.name}"
    }

    private val nullValueLiveData = MutableLiveData<Any?>()
    val refreshResult = Transformations.switchMap(nullValueLiveData) {
        MainRepository.refresh()
    }

    fun refresh() {
        nullValueLiveData.value = nullValueLiveData.value
    }
}

/**
LiveData 使用 map、switchMap 的场景：
map： 需要对liveData 发射的数据进行转换
switchMap: 页面要观察的 liveData 不是在 viewModel中创建时，使用switchMap 转换
 */